#ifndef _CAMERA_H_
#define _CAMERA_H_

#include "vec3f.h"

/** \brief The camera which the user sees the 3D world through.
 *
 * 	This camera class is what should be used to manipulate what the user is
 * 	looking at; point() should be called in displayFunc(int) before any
 * 	object drawing occurs.
 */
class Camera
{
	Vec3f _pos; /**< Position in 3D space of camera. */
	Vec3f _rot; /**< Rotation in 3D space of camera.
					Each component of this vector represents the amount
					of rotation along that axis in degrees, from
					0.0f to 360.0f. */

	public:
		/** \brief Constructs camera in default position with default rotation
		 *
		 * 	The camera is constructed at 0.0f, 0.0f, 0.0f with a rotation of
		 * 	0.0f, 0.0f, 0.0f (i.e., situated at the origin pointing along the
		 * 	negative z axis.
		 */
		Camera();

		/** \brief Constructs camera in given position with given rotation
		 *
		 * 	\param pos Initial position vector of camera
		 * 	\param rot Initial rotation vector of camera
		 *
		 * 	The camera is constructed at \a pos and is rotated by \a rot.
		 */
		Camera(Vec3f pos, Vec3f rot);

		/** \brief Positions the camera before drawing the scene. Call prior
		 * 		to drawing each frame.
		 *
		 * 	This function points the camera by translating and rotating the
		 * 	matrix stack accordingly. To use a camera, call this method
		 * 	before drawing a scene.
		 */
		void point();

		/** \brief Moves the camera a displacement \a d.
		 *
		 * 	\param d Displacement to move the camera.
		 */
		void move(Vec3f d);

		/** \brief Rotates the camera an angle \a r.
		 *
		 * 	\param r Angle (x,y,z) to rotate the camera.
		 */
		void rotate(Vec3f r);
		
		
		Vec3f getLocation();
};

#endif
